// temperature_curve.h
#ifndef TEMPERATURE_CURVE_H
#define TEMPERATURE_CURVE_H

#include <QWidget>
#include "qcustomplot.h"
#include <QVector>
#include <QTimer>
#include <QLabel>  // 添加QLabel头文件
#include "globalval.h"

namespace Ui {
class Temperature_Curve;
}

class Temperature_Curve : public QWidget
{
    Q_OBJECT

public:
    explicit Temperature_Curve(QWidget *parent = 0);
    ~Temperature_Curve();

    // 公共方法用于更新数据
    void updateTemperatureData(const QVector<double> &times, const QVector<double> &temperatures);
    void updateHumidityData(const QVector<double> &times, const QVector<double> &humidities);

    // 设置连接状态
    void setConnectedState(bool connected);

public slots:
    void dataUpSlot(const QByteArray& msg);

private slots:
    void onTemperatureButtonClicked();
    void onHumidityButtonClicked();
    void updateCharts();
    void checkTemperatureTimeout();  // 添加温度超时检测槽函数
    void checkHumidityTimeout();     // 添加湿度超时检测槽函数

private:
    Ui::Temperature_Curve *ui;

    // 按钮状态标志位
    bool tempButtonState;  // 温度按钮状态：0-未激活，1-激活
    bool humButtonState;   // 湿度按钮状态：0-未激活，1-激活

    // QCustomPlot指针
    QCustomPlot *temperaturePlot;
    QCustomPlot *humidityPlot;

    // 覆盖层widget（未连接状态显示）
    QWidget *overlayWidget;

    // 高温警告标签
    QLabel *highTempWarningLabel;

    // 定时器
    QTimer *dataTimer;

    // 存储时间和数据
    QVector<double> timeData;
    QVector<double> temperatureData;
    QVector<double> timeDataHumidity;
    QVector<double> humidityData;

    // 最近一次的数据
    double lastTemperature;
    double lastHumidity;

    // 起始时间
    double startTime;

    // 状态标志
    bool isConnected;
    bool isCollectingTemperature;
    bool isCollectingHumidity;

    // 动态Y轴范围
    double tempMin;
    double tempMax;
    double humMin;
    double humMax;

    // 初始化图表
    void setupTemperaturePlot();
    void setupHumidityPlot();

    // 停止所有采集
    void stopAllCollection();

    // 发送控制命令
    void sendControlCommand(const QJsonObject& command);

    // 更新按钮样式
    void updateButtonStyles();

    // 更新温度图表
    void updateTemperatureChart(double temperature);

    // 更新湿度图表
    void updateHumidityChart(double humidity);

    // 检查并显示高温警告
    void checkHighTemperatureWarning(double temperature);

    // 初始化高温警告标签
    void setupHighTempWarningLabel();

    // 初始化超时提示标签
    void setupTimeoutLabels();

    // 动态调整Y轴范围
    void updateTemperatureYRange(double temperature);
    void updateHumidityYRange(double humidity);

    // 超时检测相关
    QTimer *temperatureTimeoutTimer;
    QTimer *humidityTimeoutTimer;
    QLabel *temperatureTimeoutLabel;
    QLabel *humidityTimeoutLabel;
    qint64 lastTemperatureTime;
    qint64 lastHumidityTime;
    bool temperatureTimeout;
    bool humidityTimeout;

    // 新增：连续零值计数
    int temperatureZeroCount;      // 温度连续零值计数
    int humidityZeroCount;         // 湿度连续零值计数
    const int ZERO_THRESHOLD = 6;  // 3秒内6次零值（0.5秒一次）判定为超时

    const double HIGH_TEMP_THRESHOLD;
};

#endif // TEMPERATURE_CURVE_H
